<#include "/@inc/funcMacros.ftl">
<#assign className = TriaGram + "E" + Prefix + LateType + "AttrBehavior">
<#assign baseName = TriaGram + Prefix + LateType>
<#assign intfName = TriaGram + "I" + Prefix + LateType>
<#include "/@inc/copyright.txt">
<@pp.renameOutputFile name=className +".h">
</@pp.renameOutputFile>
#ifndef __${className}_H
#define __${className}_H
<#include "/@inc/copyright.txt">

//===========================================================================
//  Abstract of the class:
//  ----------------------
//
//  Code extension implementing the CATIAttrBehavior interface ,
//  which describes expected behavior on object valuating an attribute.
//  This extension extends the ${LateType} Feature.
//
//===========================================================================
//  Inheritance:
//  ------------
//              CATBaseUnknown (System Framework)
//
//===========================================================================
//  Main Method:
//  ------------
//
//  GetRequestedBehavior
//
//===========================================================================
// System Framework
#include "CATBaseUnknown.h"   // Base class for ${className}

// ObjectSpecsModeler Framework
#include "CATBehaviorSpecs.h" // To return the Behavior of an Attribute

// System Framework
class CATUnicodeString;       // To handle Attribute Names

class ${className} : public CATBaseUnknown
{
 public :
   CATDeclareClass;

   ${className}();
   virtual ~${className}();

   /**
     * Returns for a given attribute the expected behavior of its valuating objects
     * @param ipAttrName
     *        name of the concerned attribute.
     * @param oppBehavior
     *        list of lists of interfaces in the CATBehaviorSpecs format.This parameter
     *        has to be deleted by the caller.
     *        <br> this list is a combination of interfaces implemented by the object
     *         valuating the attribute.
     */
   HRESULT GetRequestedBehavior(const CATUnicodeString* ipAttrId, CATBehaviorSpecs** oppBehavior);

 private:

    // Copy constructor, not implemented
    // Set as private to prevent from compiler automatic creation as public.
    ${className}(const ${className} &iObjectToCopy);

    // Assignment operator, not implemented
    // Set as private to prevent from compiler automatic creation as public.
    ${className} & operator = (const ${className} &iObjectToCopy);

};

#endif
